// 给定 S 和 T 两个字符串，当它们分别被输入到空白的文本编辑器后，判断二者是否相等，并返回结果。 # 代表退格字符。

 

// 示例 1：

// 输入：S = "ab#c", T = "ad#c"
// 输出：true
// 解释：S 和 T 都会变成 “ac”。
// 示例 2：

// 输入：S = "ab##", T = "c#d#"
// 输出：true
// 解释：S 和 T 都会变成 “”。
// 示例 3：

// 输入：S = "a##c", T = "#a#c"
// 输出：true
// 解释：S 和 T 都会变成 “c”。
// 示例 4：

// 输入：S = "a#c", T = "b"
// 输出：false
// 解释：S 会变成 “c”，但 T 仍然是 “b”。
 

// 提示：

// 1 <= S.length <= 200
// 1 <= T.length <= 200
// S 和 T 只含有小写字母以及字符 '#'。

#include <string>

using std::string;

class Solution {
public:
    bool backspaceCompare(string S, string T) {
        return func(S) == func(T);
    }
    string func(string s) {
        string res{};
        for (char c : s) {
            if (c == '#') {
                if (!res.empty()) res.pop_back();
            } else {
                res.push_back(c);
            }
        }
        return res;
    }
};

class Solution {
public:
    bool backspaceCompare(string S, string T) {
        int s{0}; // S的有效长度
        int t{0}; // T的有效长度 
        for (char c : S) {
            if (c == '#') {
                if (s != 0) {
                    --s;
                }
            } else {
                S[s++] = c;
            }
        }
        for (char c : T) {
            if (c == '#') {
                if (t != 0) {
                    --t;
                }
            } else {
                T[t++] = c;
            }
        }
        return S.substr(0, s) == T.substr(0, t);
    }
};